Virtual Memory
초기 컴퓨터 시스템은 매우 제한된 메모리 자원을 가지고 있었기 때문에, 프로그래머들은 사용 가능한 메모리 내에서 최대한 효율적으로 프로그램을 작성해야만 했습니다.
하지만 시간이 지나면서 하드웨어 기술의 발전과 함께 프로그램들은 점점 더 복잡하고 메모리 요구사항이 증가하는 추세를 보였습니다.
이러한 변화 속에서, 메모리를 더욱 효과적으로 관리하고 최대한 활용하기 위해 가상메모리라는 개념이 도입되었습니다.
Virtual Memory
지금까지 메모리 관리 방법은 명령어가 반 드시 물리적 메모리에서 실행되어야 한다는 필요에 의해 사용되었습니다.
하지만 프로그램은 일반적으로 발생하지 않는 오류들에 대한 코드들과 같이 실행되지 않을 부분들이 존재합니다.
또한 배열, 테이블과 같은 자료구조는 실제 필요한 양보다 더 많은 양의 메모리를 할당받습니다.
즉, 프로그램의 모든 부분이 항상 동시에 필요하지 않을 수 있습니다.
이러한 관찰을 통해 프로그램의 일부만 실제 메모리를 할당하여 실행하는
virtual memory 방법이 등자하였습니다.
가상 메모리는 시스템 라이브러리와 같은 공유된 자원을 여러 프로세스에서 공유할 수 있습니다.
각 프로세스는 공유되는 라이브러리를 자신의 주소 공간의 한 부분으로 생각하지만, 실제로 여러 프로세들이 동일한 페이지를 공유하는 것이죠.Demanding Paging
프로그램의 모든 기능을 포함한 전체를 메모리에 올리는 것은 비효율적이므로, 필요한 만큼만 페이지에 적재하는 것이 더 방법입니다.
프로그램이 실행되는 동안, 가상 메모리는 페이지 사용을 요구받은 경우에만 페이지에 적재하는 것을
demanding paging라고 합니다.Swapping은 프로세스 단위로 메모리를 전부 교체하는 것이라면,
Demamding Paging은 페이지 단위로 메모리를 교체하는 것을 의미합니다.
Page Fault
가상 메모리를 사용하면 접근하려는 페이지가 실제 메모리에 올라와 있지 않을 수 있습니다.
즉 페이지 테이블에서 프레임의 valid bit가 0의 값을 가지는 경우
page fault라고 합니다.
가상 메모리는 이를 처리하기 위한 방법이 필요합니다.
- CPU가 page table에 가서 page에 접근을 시도합니다.
- Valid bit(1-valid, 0-invalid)를 확인하고, invalid 상태이면 interrupt를 발생합니다.
ISR에서 interrupt를 처리하기 위해 디스크에서 page를 찾습니다.- 찾은 page를 메모리에 올려 frame으로 만듭니다.
- Page table을 업데이트합니다.
- CPU에게 다시 명령을 수행하도록 합니다.
Pure Demanding Paging
어떠한 페이지가 필요한지 알 수 없으므로, 순수하게 요구된 페이지만 올리는 방법을
pure demanding paging이라고 합니다.
이는 효율적으로 메모리를 사용할 수 있지만
,
프로그램 시작부터
page fault가 발생하므로 느립니다.Preparing
위와 반대로 프로그램을 실행할 때 필요할 것이라고 판단되는 페이지를 미리 올리는 방법입니다.
,
Page fault가 발생할 확률이 적으므로 속도 면에서 빠르지만미리 올라간 페이지를 사용하지 않는다면 메모리가 낭비됩니다.
Effective Access Time
Page Fault가 발생하면 디스크에서 해당 페이지를 메모리에 로드하고, page table을 업데이트 하는 시간이 필요합니다.
이러한 시간을 고려하여 평균적으로 어느정도 소요되는지 계산하는 것을 effective access time이라고 합니다. 페이지 부재 확률 (probability of a page fault = page fault rate)
메모리를 읽는 시간
Page fault가 발생했을 때 소요되는 시간
메모리를 읽는 시간
Page fault가 발생했을 때 소요되는 시간
이고 일때
- ->
- ->
Effective Access Time을 줄이기 위해서 page fault